package com.zshy.base.mq.config;

import com.zshy.base.mq.serialization.MQEventSerialization;
import com.zshy.base.mq.store.MQEventStorer;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 基础MQ属性
 */
@Data
@ConfigurationProperties(prefix = "base-mq")
public class BaseMQProperties {
    /**
     * 是否启用
     */
    private boolean enable = false;
    /**
     * MQ实现：none|kafka|rocket|redis，一个应用只用一套MQ发布和订阅
     */
    private String impl = "none";
    /**
     * 服务地址
     */
    private String server = "";
    /**
     * 命名空间，或作为所有主题的前缀，用于环境隔离等场景，如UAT/生产/租户环境共用一个MQ
     */
    private String namespace = "";
    /**
     * 是否持久化到本地，需要定义实现了MQStorer的Bean
     *
     * @see MQEventStorer
     */
    private boolean persist = false;
    /**
     * 序列化器，定义实现了MQSerialization的Bean
     *
     * @see MQEventSerialization
     */
    private String serialization = "JsonMQEventSerialization";
    /**
     * 是否自动提交
     */
    private boolean autoAck = false;
    /**
     * 发送失败重试次数
     */
    private int retries = 0;
    /**
     * 用户
     */
    private String username = "";
    /**
     * 密码
     */
    private String password = "";
    /**
     * 生产者组
     */
    private String producerGroup = "DEFAULT";
    /**
     * 默认主题
     */
    private String defaultTopic = "DEFAULT";


    /**
     * 交换机
     * `
     */
    private String exchange = "";

    /**
     * 命名空间获取
     *
     * @return
     */
    public String namespace(String concat) {
        if (this.namespace != null && !this.namespace.isEmpty()) {
            return namespace + concat;
        }
        return "";
    }

}